package service

import (
	"gitee.com/gopher2011/mall/app/dao"
	"time"
)

// 全局公开对象
var UmsMenu = umsMenuService{}

// 私有对象，所有的方法都绑定到这个结构体上。

type umsMenuService struct{}

func (p *umsMenuService) Create(u dao.UmsMenu) (int64, error) {
	u.CreateTime = time.Now()
	return dao.UmsMenuDao.Insert(u)
}

// 修改菜单层级
func (p *umsMenuService) updateLevel(us *dao.UmsMenu) dao.UmsMenu {
	//没有父菜单时为一级菜单
	if us.ParentId == 0 {
		us.Level = 0
	} else {
		//有父菜单时选择根据父菜单level设置
		res, err := dao.UmsMenuDao.SelectById(us.ParentId) //返回的这个res对象就是 us的父级菜单，因为 us.ParentId == res.Id
		if err != nil {
			panic(err)
		}
		us.Level = res.Level + 1
	}
	return *us
}

func (p *umsMenuService) Update(id int64, u *dao.UmsMenu) (int64, error) {
	ua := p.updateLevel(u)
	ua.Id = id
	return dao.UmsMenuDao.UpdateById(ua)
}

func (p *umsMenuService) GetItem(id int64) (dao.UmsMenu, error) {
	return dao.UmsMenuDao.SelectById(id)
}

func (p *umsMenuService) Delete(id int64) (int64, error) {
	return dao.UmsMenuDao.DeleteById(id)
}

func (p *umsMenuService) List(id int64, arg dao.UmsMenuList) ([]dao.UmsMenu, error) {
	arg.ParentId = id
	arg.PageNum = (arg.PageNum - 1) * arg.PageSize
	return dao.UmsMenuDao.List(arg)
}

//树形结构返回所有菜单列表
func (p *umsMenuService) TreeList() ([]*dao.UmsMenuNode, error) {
	var l dao.UmsMenu
	return l.MenuList()
}

//修改菜单显示状态
func (p *umsMenuService) UpdateHidden(id int64, hidden int32) (int64, error) {
	return dao.UmsMenuDao.UpdateHidden(id, hidden)
}

//参数 menu.ParentId = 0,即: menu是一级菜单。针对 menu 这个一级菜单,使用递归的方式构造树形菜单
//func (p *umsMenuService)covertMenuNode(menu dao.UmsMenu,list []dao.UmsMenu)(dao.UmsMenuNode,error) {
//	l := dao.UmsMenuNode{
//		Id:         menu.Id,
//		ParentId:   menu.ParentId,
//		Title:      menu.Title,
//		Level:      menu.Level,
//		Sort:       menu.Sort,
//		Name:       menu.Name,
//		Icon:       menu.Icon,
//		Hidden:     menu.Hidden,
//		CreateTime: menu.CreateTime,
//	}
//	for _, item := range list { // 遍历 menuList
//		if item.ParentId == menu.Id { //如果 item 是 menu的子菜单
//			node, _ := p.covertMenuNode(item, list)
//			l.Children = append(l.Children, node)
//			return l, nil
//		}
//	}
//	return l, nil
//}

//func (p *umsMenuService)covertMenuNode(menu dao.UmsMenu,menuList []dao.UmsMenu)[]dao.UmsMenuNode{
//	var node []dao.UmsMenuNode
//	if menu.Level == 10 {
//		return node
//	}
//	list :=p.findChildren(menu.Id,menuList) //获取 menu的子节点
//	if len(list) == 0 {
//		return node
//	}
//
//	for _,item := range list { //遍历menu的子节点
//		child := p.covertMenuNode(item,list)
//		ua := dao.UmsMenuNode{
//			Base: item,
//			Children: child,
//		}
//		node = append(node,ua)
//	}
//	return node
//}
//func (p *menuList)covertMenuNode(menuId int64,level int32)[]dao.UmsMenuNode{
//	var node []dao.UmsMenuNode
//	if level == 10 {
//		return node
//	}
//	list :=p.findChildren(menuId) //获取 menu的子节点
//	if len(list) == 0 {
//		return node
//	}
//
//	for _,v := range list { //遍历menu的子节点
//		child := p.covertMenuNode(v.Id,level+1)
//		node = append(node,dao.UmsMenuNode{Base: v,Children: child})
//	}
//	return node
//}
//
//// 查找子节点 参数<menuList>是从数据库查询而来的
//func (p *menuList)findChildren(menuId int64)[]dao.UmsMenu{
//	child := make([]dao.UmsMenu,0)
//	for _, item := range *p {
//		if item.ParentId == menuId {
//			child = append(child,item)
//		}
//	}
//	return child
//}

//树形结构返回所有菜单列表
//func (p *umsMenuService)TreeList()(u []dao.UmsMenuNode,err error){
//	//list, err := dao.UmsMenuDao.ListAll()
//	//if err != nil {
//	//	return u, err
//	//}
//	//var m menuList
//	//m = list
//	//node := m.covertMenuNode(0, 0)
//
//	//var node []dao.UmsMenuNode
//	//for _,item := range all {
//	//	if item.ParentId == 0 {
//	//		node = p.covertMenuNode(item, all)
//	//
//	//	}
//	//}
//	//return node, nil
//	var menu dao.UmsMenu
//	dao.UmsMenuDao.SelectByParentId()
//
//
//
//}
